Возникла проблема при создании произвольного дизайна формы. Накидал форму:
public class Form extends JFrame {
private JPanel rootPanel;
private JButton close;
private JTextField text;
private JButton submit;
private JPanel imagePanel;
private Decoration decoration;
private JButton[] yesNoButtons = Helper.createButtons(JOptionPane.YES_NO_OPTION);
private JButton[] okCancelButtons = Helper.createButtons(JOptionPane.OK_CANCEL_OPTION);
{
setContentPane(rootPanel);
decoration = new Decoration(this);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
closeProgram();
System.exit(0);
}
});
setSize(800, 600);
setMinimumSize(new Dimension(400, 300));
submit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int result = decoration.showOptionDialog(
Form.this,
"Question",
JOptionPane.QUESTION_MESSAGE,
JOptionPane.YES_NO_OPTION,
null,
yesNoButtons,
yesNoButtons[0]
);
System.out.println(result);
}
});
close.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("close");
}
});
}
private void closeProgram()
{
System.out.println("Exit Application");
}
public static void main(String[] args) {
try {
UIManager.getCrossPlatformLookAndFeelClassName();
} catch (Exception e) {
e.printStackTrace();
}
Form frame = new Form();
frame.setLocationRelativeTo(null);
// Закрытие процесса приложения
//frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private void createUIComponents() {
// TODO: place custom component creation code here
imagePanel = new ImagePanel(Images.getBgImage(), true, true);
close = new ImageButton(Images.getButtonImage(), true, true);
}
}
Класс ImagePanel для произвольной imagePanel с которой проблемы нет. Задал картинку из ресурсов:
import java.awt.*;
import javax.swing.JPanel;
public class ImagePanel extends JPanel {
private Image image;
private boolean uniform;
private boolean fill;
/**
* Creates a new <code>JPanel</code> with a double buffer
* and a flow layout.
*/
public ImagePanel(Image image, boolean uniform, boolean fill) {
this.image = image;
this.uniform = uniform;
this.fill = fill;
}
public ImagePanel(Image image)
{
this.image = image;
}
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
Rectangle rect = Helper.getAreaToFill(
this.getSize(),
new Dimension(image.getWidth(null), image.getHeight(null)),
this.uniform,
this.fill
);
graphics.drawImage(image, rect.x, rect.y, rect.width, rect.height, null);
}
@Override
protected void paintBorder(Graphics g) {
super.paintBorder(g);
}
}
И проблемный произвольный класс для редизайна картинки:
public class ImageButton extends JButton {
private Image image;
private boolean uniform;
private boolean fill;
/**
* Creates a button with no set text or icon.
*/
public ImageButton(Image image, boolean uniform, boolean fill) {
this.image = image;
this.uniform = uniform;
this.fill = fill;
}
public ImageButton(Image image)
{
this.image = image;
}
/**
* FIXME: Not Drow
* TODO: Process inactive buttons
*/
@Override
protected void printComponent(Graphics graphics) {
super.printComponent(graphics);
if (isOpaque()) {
graphics.setColor(getBackground());
graphics.fillRect(0, 0, getWidth(), getHeight());
}
Rectangle rect = Helper.getAreaToFill(
this.getSize(),
new Dimension(image.getWidth(null), image.getHeight(null)),
this.uniform,
this.fill
);
if (isEnabled()) {
graphics.drawImage(image, rect.x, rect.y, rect.width, rect.height, null);
} else {
}
}
}
И класс Images:
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Images {
private Images() {
}
private static BufferedImage buttonImage;
private static BufferedImage closeImage;
private static BufferedImage bgImage;
public static BufferedImage getButtonImage()
{
if (buttonImage == null) {
buttonImage = getImage("images/button.png");
}
return buttonImage;
}
public static BufferedImage getCloseImage() {
if (closeImage == null) {
closeImage = getImage("images/close_button.png");
}
return closeImage;
}
public static BufferedImage getBgImage() {
if (bgImage == null) {
bgImage = getImage("images/bg.jpg");
}
return bgImage;
}
private static BufferedImage getImage(String path) {
try {
return ImageIO.read(Images.class.getResource(path));
} catch (IOException e) {
e.printStackTrace();
return new BufferedImage(1, 1, BufferedImage.TYPE_4BYTE_ABGR);
}
}
}
Вроде всё просто, но при дебаге в перегрженный метод printComponent() для ImageButton даже не попадаем, для ImagePanel фон картинкой применяется.
Виртуальный выделенный сервер (VDS) становится отличным выбором
не могу понять почему не компилится данныек код ведь типо пишет что у лмбд плохой тип
Нужно сделать так, чтобы программа понимала, что пользователь нажал на ЛЮБОЕ место экрана за пределами editText
Есть 2 фрагмента в одном активити которые сменяются слайдом(2 вкладки)2 фрагмента: ArmaturaWeight
Из одной статьи в интернете : SessionFactory getCurrentSession() возвращает сессию, связанную с контекстомНо для того, чтобы это работало, нам нужно настроить...