我的cardlayout的下一个功能正常运行,但以前的功能不起作用。就我而言,只有“ layout.previous( ___ );”
在我的makePanel()方法中的actionPerformed方法主体中应该可以工作,但是当我运行程序并单击prev按钮时,什么也没有发生。我究竟做错了什么?–
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
public class Temp
{
public static void main (String[] args)
{
new MakeAQuiz();
}
static class MakeAQuiz
{
private JPanel start, base, fields, buttonz, question;
private String [] labels = {"Enter your question: ", "Answer 1: ", "Answer 2: ", "Answer 3: ", "Answer 4: "};
private JButton [] buttons = {new JButton("<<Go back"), new JButton("I'm done"), new JButton("Next>>")};
private JFrame makeFrame;
public MakeAQuiz()
{
start = new JPanel(new CardLayout());
start.add(makePanel(),"1");
makeFrame = new JFrame();
makeFrame.setSize(500,600);
makeFrame.add(start);
makeFrame.setVisible(true);
makeFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public JFrame getJFrame()
{
return makeFrame;
}
public JPanel makePanel()
{
question = new JPanel(new FlowLayout());
fields = new JPanel(new GridBagLayout());
buttonz = new JPanel(new FlowLayout());
base = new JPanel(new BorderLayout());
GridBagConstraints c = new GridBagConstraints();
c.weighty=0.5; //adds padding between the fields vertically
for (int i = 1; i<5; i++)
{
c.gridy++; //puts each field in a seperate line/row
JLabel label = new JLabel(labels[i]);
// c.fill = GridBagConstraints.HORIZONTAL;
fields.add(label,c);
JTextField textField = new JTextField(20);
fields.add(textField,c);
}
final CardLayout layout = (CardLayout)start.getLayout();
buttons[1].addActionListener(new ActionListener() {
// @Override
public void actionPerformed(ActionEvent e) {
buttons[0].setEnabled(false);
buttons[2].setEnabled(false);
// for(Component comp : cardPanel.getComponents()) {
// if(comp instanceof Page) {
// Page page = (Page)comp;
// page.printData();
// }
// }
}
});
buttons[2].addActionListener(new ActionListener()
{
// @Override
public void actionPerformed(ActionEvent e)
{
start.add(makePanel(), String.valueOf(start.getComponentCount() + 1));
layout.next(start);
}
});
buttons[0].addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
layout.previous(start);
}
});
buttonz.add(buttons[0]);
buttonz.add(buttons[1]);
buttonz.add(buttons[2]);
JLabel l = new JLabel(labels[0]);
JTextField t = new JTextField(30);
question.add(l);
question.add(t);
base.add(question,BorderLayout.NORTH);
base.add(buttonz,BorderLayout.SOUTH);
base.add(fields,BorderLayout.CENTER);
return base;
}
}
}
一旦向start
面板中添加了一些其他组件,我就不会遇到问题(与您的代码无关)。
但是,您会遇到问题,因为您已将按钮添加到面板中,该按钮已显示在中CardLayout
。
更好的解决方案是将按钮放在主屏幕的底部,并将其与卡分开。
您将需要维护某种计数器或对当前页面的引用,因为CardLayout
它没有提供任何方式来获取对当前卡的引用。这将允许您适当地启用/禁用下一个/上一个按钮…
更新为可运行示例…
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class MakeAQuiz {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
new MakeAQuiz();
}
});
}
private JPanel start, base, fields, buttonz, question;
private String[] labels = {"Enter your question: ", "Answer 1: ", "Answer 2: ", "Answer 3: ", "Answer 4: "};
private JButton[] buttons = {new JButton("<<Go back"), new JButton("I'm done"), new JButton("Next>>")};
private JFrame makeFrame;
public MakeAQuiz() {
start = new JPanel(new CardLayout());
start.add(makePanel(), "1");
makeFrame = new JFrame();
makeFrame.add(start);
buttonz = new JPanel(new FlowLayout());
final CardLayout layout = (CardLayout) start.getLayout();
buttons[1].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
buttons[0].setEnabled(false);
buttons[2].setEnabled(false);
}
});
buttons[2].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int count = start.getComponentCount();
start.add(new JLabel(Integer.toString(count), JLabel.CENTER), Integer.toString(count));
layout.next(start);
}
});
buttons[0].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
layout.previous(start);
}
});
buttonz.add(buttons[0]);
buttonz.add(buttons[1]);
buttonz.add(buttons[2]);
makeFrame.add(buttonz, BorderLayout.SOUTH);
makeFrame.pack();
makeFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
makeFrame.setVisible(true);
}
public JFrame getJFrame() {
return makeFrame;
}
public JPanel makePanel() {
question = new JPanel(new FlowLayout());
fields = new JPanel(new GridBagLayout());
base = new JPanel(new BorderLayout());
GridBagConstraints c = new GridBagConstraints();
c.weighty = 0.5; //adds padding between the fields vertically
for (int i = 1; i < 5; i++) {
c.gridy++; //puts each field in a seperate line/row
JLabel label = new JLabel(labels[i]);
// c.fill = GridBagConstraints.HORIZONTAL;
fields.add(label, c);
JTextField textField = new JTextField(20);
fields.add(textField, c);
}
JLabel l = new JLabel(labels[0]);
JTextField t = new JTextField(30);
question.add(l);
question.add(t);
base.add(question, BorderLayout.NORTH);
base.add(fields, BorderLayout.CENTER);
return base;
}
}
问题内容: 我正在尝试使用opencv v 2.1创建图像,但出现此错误: AttributeError:“模块”对象没有属性“ CreateImage” 该代码是 问题答案: 您正在覆盖名称空间。仅使用,而不使用其他。
下面是一个函数,它获取一个长字符串,并返回一个按段落分割的字符串。 问题是k是空的。为什么函数不起作用?
问题内容: 我正在使用这种技术来加载数据。因此,我创建了以下解析函数: 存在的问题是,是在瞬间函数执行。它是正确的/错误吗?我该如何解决? 问题答案: 您需要改用。该只更新 后 的路线被改变。因此,您的代码应遵循以下原则:
问题内容: 我了解到删除前导和尾随空格。但是在我的情况下,它无法正常工作,我正在尝试使用以下代码,但是输出的前导和尾随空格。但是我的期望是文本没有开头和结尾的空格。这是我的代码。 请帮我 问题答案: 您需要将结果重新分配给: 请记住, Java中的字符串是不可变的 ,因此 几乎 所有的String类方法都将创建并返回新的字符串,而不是就地修改字符串。 尽管这是题外话,但是(正如我在那所说的),值得
我试图将Spring Cloud Stream与本主题中描述的功能一起使用。但是它不起作用。 我的职能: 我推送消息。通过使用输出注释制作的生产者,发送到consumer-in-0频道: 我的yaml通道配置: 如果我通过配置使用消费者,一切正常。同样在rabbitmq管理器中,我看到生产者正在工作并发送消息,但消费者并不使用它们。帮帮我,请某人帮忙。 附言:我也使用Spring WebFlux
问题内容: 我对jQuery函数创建的新元素的“点击”操作有问题,它不起作用。 我为此链接创建了一个JSFiddle,但是它不能完美运行,因为我无法在JSFiddle中调用Ajax请求。 我有两个按钮 首次调用ajax函数时,一个按钮会回答以下输出: 按钮二仅用于擦除。按钮一创建。 当我单击此新按钮时,ajax函数将返回此按钮, 第一个按钮消失,第二个按钮回来。现在存在问题所在,如果我单击第一个按