Я строю программу Swing, и я хочу, чтобы иметь возможность использовать кнопку, чтобы изменить некоторые функции (шрифт, цвет переднего плана, цвет фона и т.д.) JComponents
(JLabel
, JButton
) ,Alter JComponent из Listener/Event
Я могу сделать это без проблем, если все компоненты были явно объявлены и определены, но я не могу понять, как это сделать, если они неявно построены с использованием общих методов.
Ниже приведено gist того, что у меня есть до сих пор, минус какие-то неважные детали. Когда нажаты styleButton1
и 2, я хочу обновить или перестроить JFrame таким образом, чтобы новые значения для функций/стиля (в этом примере, Font) использовались для компонентов (testButton1
и 2), изменив currentFont
и затем перекрасив.
Я не получаю никаких ошибок с этим, но frame
и компоненты не перестраиваются и не обновляются, т. Е. Ничего не происходит при нажатии кнопок стиля.
Любые идеи о том, как сделать эту работу? Или любые другие подходы, которые я могу использовать для получения желаемого эффекта?
//imports
public class GuiTesting extends JFrame {
public static void main(String[] args) {
frame = new GuiTesting();
frame.setVisible(true);
}
static JFrame frame;
static Font standardFont = new Font("Arial", Font.BOLD, 10);
static Font secondFont = new Font("Times New Roman", Font.PLAIN, 10);
static Font currentFont = standardFont;
public GuiTesting() {
setTitle("GUI Testing");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 400);
JPanel mainPanel = new JPanel();
getContentPane().add(mainPanel);
mainPanel.add(basicButton("Button1"));
mainPanel.add(basicButton("Button2"));
mainPanel.add(style1Button("Style 1"));
mainPanel.add(style2Button("Style 2"));
}
public static JButton basicButton(String title) {
JButton button = new JButton(title);
button.setPreferredSize(new Dimension(80, 30));
button.setFont(currentFont);
return button;
}
public static JButton style1Button(String title) {
JButton button = new JButton(title);
button.setPreferredSize(new Dimension(80, 30));
button.setFont(standardFont);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
currentFont = standardFont;
frame.repaint();
}
});
return button;
}
public static JButton style2Button(String title) {
JButton button = new JButton(title);
button.setPreferredSize(new Dimension(80, 30));
button.setFont(secondFont);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
currentFont = secondFont;
frame.repaint();
}
});
return button;
}
}
Я понимаю, что вы сделали здесь, и я думаю, что это будет работать для того, что я пытаюсь сделать. Большое спасибо! – FalconRunner11