Возникла проблема при создании произвольного дизайна формы. Накидал форму:
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 фон картинкой применяется.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
не могу понять почему не компилится данныек код ведь типо пишет что у лмбд плохой тип
Нужно сделать так, чтобы программа понимала, что пользователь нажал на ЛЮБОЕ место экрана за пределами editText
Есть 2 фрагмента в одном активити которые сменяются слайдом(2 вкладки)2 фрагмента: ArmaturaWeight
Из одной статьи в интернете : SessionFactory getCurrentSession() возвращает сессию, связанную с контекстомНо для того, чтобы это работало, нам нужно настроить...