每当我调用 add corePanel 或 add electivePanel 方法时,它们只是替换添加的最后一个按钮,而不是在我在 Jpanel 中设置的 4 列中并排添加一个新按钮。
我知道当变量实际上是按钮时我已将它们命名为“Panel”,但这无关紧要。
我真的需要一些帮助。
谢谢
编辑: 现在,当我将鼠标悬停在按钮上时,其中的所有信息(Jpanels)都会消失?
package Assignment2.view;
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.Border;
import ams.model.Course;
public class CoursePanel extends JPanel
{
private JButton corePanel = new JButton();
private JButton electivePanel = new JButton();
private JLabel ccLabel = new JLabel("Code: ");
private JLabel titleLabel = new JLabel("Title: ");
private JLabel cpLabel = new JLabel("Credit Points: ");
private JLabel prLabel = new JLabel("Prereqs: ");
private Border blackline;
public CoursePanel()
{
setLayout(new GridLayout(0,4));
}
public void addcorePanel(Course createcourse)
{
// core panel properties
blackline = BorderFactory.createLineBorder(Color.black,10);
corePanel.setLayout(new GridLayout(4,1));
corePanel.setBackground(Color.GRAY);
corePanel.setBorder(blackline);
corePanel.add(ccLabel);
corePanel.add(titleLabel);
corePanel.add(cpLabel);
corePanel.add(prLabel);
corePanel.setAlignmentX(LEFT_ALIGNMENT);
corePanel.setAlignmentY(TOP_ALIGNMENT);
//Needed to rebuild the prerequisites for display.
String[] prereqs = null;
String result = null;
prereqs = createcourse.getPreReqs();
if (prereqs != null)
{
StringBuilder builder = new StringBuilder();
for(String s : prereqs)
{
builder.append(s);
builder.append("\n");
}
result = builder.toString();
}
ccLabel.setText("Code: " + createcourse.getCode());
titleLabel.setText("Title: " + createcourse.getTitle());
cpLabel.setText("Credit points: " + Integer.toString(createcourse.getCreditPoints()));
prLabel.setText("Prereqs: " + result);
add(corePanel);
}
public void addelectivePanel(Course createcourseE)
{
//elective panel properties
electivePanel.setLayout(new GridLayout(4,1));
electivePanel.setBackground(Color.GRAY);
electivePanel.add(ccLabel);
electivePanel.add(titleLabel);
electivePanel.add(cpLabel);
electivePanel.add(prLabel);
electivePanel.setAlignmentX(LEFT_ALIGNMENT);
electivePanel.setAlignmentY(TOP_ALIGNMENT);
//Needed to rebuild the prerequisites for display.
String[] prereqs = null;
String result = null;
prereqs = createcourseE.getPreReqs();
if (prereqs != null)
{
StringBuilder builder = new StringBuilder();
for(String s : prereqs)
{
builder.append(s);
builder.append("\n");
}
result = builder.toString();
}
ccLabel.setText("Code: " + createcourseE.getCode());
titleLabel.setText("Title: " + createcourseE.getTitle());
cpLabel.setText("Credit points: " + Integer.toString(createcourseE.getCreditPoints()));
prLabel.setText("Prereqs: " + result);
add(electivePanel);
}
}
最佳答案
发生这种情况是因为您的标签和按钮(corePanel
、electivePanel
)是类变量,因此当您调用例如 addcorePanel
时,而不是创建一个新的 JButton
时,您正在操作相同的 corePanel
按钮。您应该将变量移到方法体内,如下所示:
public void addcorePanel(Course createcourse)
{
JButton corePanel = new JButton();
JLabel ccLabel = new JLabel("Code: ");
JLabel titleLabel = new JLabel("Title: ");
JLabel cpLabel = new JLabel("Credit Points: ");
JLabel prLabel = new JLabel("Prereqs: ");
// ....
// ....
}
JLabels
和 JButtons
无法共享,因此每次调用方法时都必须创建新实例。
关于java - 使用方法在 Jpanel 内添加 JButton 时,如何保持最后添加的按钮在 View 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12883762/