我到处寻找答案,但一无所获。我不知道是否还有人以前有过这个问题,但我感谢所有的帮助,谢谢。
我有一个100乘100的标签网格,让我解释一下我是如何创建的。我有一个创建和填充Strings数组的方法。下一个方法创建一个标签数组,然后使用setText()方法将String(从上一个方法创建)添加到标签中。之后的方法获取这些JLabels,并将它们添加到网格布局的J面板中。然后,我将JPanel添加到一个JScrollPane中,JScrollPane被添加到另一个带有空边框的JPanel中,最后一个JPanel被添加到JFrame中。这就是我创建网格的方式,我对此很满意,我不想改变它。
我唯一的问题是我无法从main方法修改jlabel的图像。我可以通过创建和填充JLabel的方法来实现这一点,我可以通过创建网格的方法来实现这一点,但是我不能从main方法更改JLabel的图像。我尝试为此创建一个新方法,并在主方法中调用它-nothing。我还尝试从按钮的ActionListener更改它-再次没有更改。我知道这是可能的,我知道我错过了一些非常明显的事情。
拜托你能帮忙吗?下面是代码,如果你运行它并点击按钮,你会发现什么都没发生。然而,最奇怪的是,我几乎可以从任何地方更改JLabels的背景颜色。
package roverMars;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class ArraysGrid extends JPanel {
private static final long serialVersionUID = -464020590200143351L;
final int rows = 50, columns = 50;
static BufferedImage Ahead, Down, Left, Right;
public void ImageLoader() {
try {
Ahead = ImageIO.read(this.getClass().getResource("Ahead.png"));
Down = ImageIO.read(this.getClass().getResource("Down.png"));
Left = ImageIO.read(this.getClass().getResource("Left.png"));
Right = ImageIO.read(this.getClass().getResource("Right.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("Error occured: " + e);
e.printStackTrace();
}
}
public void StringArray(String[][] labelText) {
int x = 1; // increment rows
for (int i = 0; i < labelText.length; i++) { // x
for (int j = 0; j < labelText.length; j++) { // y
labelText[i][j] = Integer.toString(x); // populate string
x++;
}
}
}
public void JLabelArray(JLabel[][] label, String[][] labelText) {
ImageLoader();
for (int i = 0; i < label.length; i++) { // x
for (int j = 0; j < label.length; j++) { // y
label[i][j] = new JLabel();
label[i][j].setText(labelText[i][j]);
label[i][j].setOpaque(true);
}
}
// Testing to see if image appears
label[0][0] = new JLabel(new ImageIcon(Down));
label[1][0] = new JLabel(new ImageIcon(Right));
}
// Add Labels to Panel,
public void Grid(JPanel Grid, JLabel[][] label) {
String x1[][] = new String[rows][columns];
StringArray(x1);
JLabelArray(label, x1);
int gHeight = label.length, gWidth = label.length;
Grid.setLayout(new GridLayout(gWidth, gHeight));
for (int i = 0; i < label.length; i++) { // x
for (int j = 0; j < label.length; j++) { // y
Grid.add(label[i][j]);
}
}
}
public void Frame(JPanel finalPanel, JPanel Grid) {
// Add Grid to Scroll Pane
JScrollPane x4 = new JScrollPane(Grid);
x4.setPreferredSize(new Dimension(700, 700)); // DO NOT DELETE THIS.
x4.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
x4.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
// Add Scroll Pane to another Panel with the Border
finalPanel.setBackground(new Color(153, 153, 204));
finalPanel.setBorder(BorderFactory.createEmptyBorder(50, 25, 50, 50));
finalPanel.add(x4);
}
// This method to button.
public static void setImage(JLabel l) {
ArraysGrid ag = new ArraysGrid();
ag.ImageLoader();
l = new JLabel(new ImageIcon(Left));
}
static JLabel[][] label = new JLabel[50][50];
public static void main(String[] args) {
ArraysGrid m = new ArraysGrid();
JPanel grid = new JPanel();
JPanel final1 = new JPanel();
m.Grid(grid, label);
m.Frame(final1, grid);
JFrame f = new JFrame();
f.setTitle("Project Testing");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setResizable(true);
f.setVisible(true);
f.setLocation(650, 50);
f.setSize(800, 800);
f.setAlwaysOnTop(true);
f.setBackground(Color.black);
f.add(final1);
JButton button = new JButton("Click Here");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.println("Clicked");
label[1][1].setBackground(Color.RED);
label[2][1] = new JLabel(new ImageIcon(Ahead));
System.out.println(label[2][1].getIcon());
setImage(label[2][2]);
// label[2][2].setIcon((Icon) Ahead); // This throws several errors
}
});
f.add(button, BorderLayout.NORTH);
f.pack();
}
}
有人能帮忙吗?我昨天花了一整天的时间试图让它发挥作用,但却一事无成。另外,我对这门课非常陌生,我在这门课上所做的一切我都是在最近几周才学会的,所以如果你同意的话,请你解释一下我需要做什么以及为什么。
非常感谢!
我没有太多的时间来仔细检查它,但是你不需要在行中创建新的JLabel
对象:
label[2][1] = new JLabel(new ImageIcon(Ahead));
因为它已经在代码的前面创建了。你也该换线了
label[2][2].setIcon((Icon)Ahead); // This throws several errors
到
label[2][2].setIcon(new ImageIcon(Ahead)); // This throws several errors
在这些更改之后,代码工作正常。
顺便说一句。你的代码看起来有点难看;)试着重构它;)
这是在我的计算机上工作的代码:
package roverMars;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class ArraysGrid extends JPanel {
private static final long serialVersionUID = -464020590200143351L;
final int rows = 50, columns = 50;
static BufferedImage Ahead, Down, Left, Right;
public void ImageLoader() {
try {
Ahead = ImageIO.read(this.getClass().getResource("Ahead.png"));
Down = ImageIO.read(this.getClass().getResource("Down.png"));
Left = ImageIO.read(this.getClass().getResource("Left.png"));
Right = ImageIO.read(this.getClass().getResource("Right.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("Error occured: " + e);
e.printStackTrace();
}
}
public void StringArray(String[][] labelText) {
int x = 1; // increment rows
for (int i = 0; i < labelText.length; i++) { // x
for (int j = 0; j < labelText.length; j++) { // y
labelText[i][j] = Integer.toString(x); // populate string
x++;
}
}
}
public void JLabelArray(JLabel[][] label, String[][] labelText) {
ImageLoader();
for (int i = 0; i < label.length; i++) { // x
for (int j = 0; j < label.length; j++) { // y
label[i][j] = new JLabel();
label[i][j].setText(labelText[i][j]);
label[i][j].setOpaque(true);
}
}
// Testing to see if image appears
label[0][0] = new JLabel(new ImageIcon(Down));
label[1][0] = new JLabel(new ImageIcon(Right));
}
// Add Labels to Panel,
public void Grid(JPanel Grid, JLabel[][] label) {
String x1[][] = new String[rows][columns];
StringArray(x1);
JLabelArray(label, x1);
int gHeight = label.length, gWidth = label.length;
Grid.setLayout(new GridLayout(gWidth, gHeight));
for (int i = 0; i < label.length; i++) { // x
for (int j = 0; j < label.length; j++) { // y
Grid.add(label[i][j]);
}
}
}
public void Frame(JPanel finalPanel, JPanel Grid) {
// Add Grid to Scroll Pane
JScrollPane x4 = new JScrollPane(Grid);
x4.setPreferredSize(new Dimension(700, 700)); // DO NOT DELETE THIS.
x4.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
x4.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
// Add Scroll Pane to another Panel with the Border
finalPanel.setBackground(new Color(153, 153, 204));
finalPanel.setBorder(BorderFactory.createEmptyBorder(50, 25, 50, 50));
finalPanel.add(x4);
}
// This method to button.
public static void setImage(JLabel l) {
ArraysGrid ag = new ArraysGrid();
ag.ImageLoader();
l = new JLabel(new ImageIcon(Left));
}
static JLabel[][] label = new JLabel[50][50];
public static void main(String[] args) {
ArraysGrid m = new ArraysGrid();
JPanel grid = new JPanel();
JPanel final1 = new JPanel();
m.Grid(grid, label);
m.Frame(final1, grid);
JFrame f = new JFrame();
f.setTitle("Project Testing");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setResizable(true);
f.setVisible(true);
f.setLocation(650, 50);
f.setSize(800, 800);
f.setAlwaysOnTop(true);
f.setBackground(Color.black);
f.add(final1);
JButton button = new JButton("Click Here");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.println("Clicked");
label[1][1].setBackground(Color.RED);
//label[2][1] = new JLabel();
System.out.println(label[2][1].getIcon());
setImage(label[2][2]);
label[2][2].setIcon(new ImageIcon(Ahead)); // This throws several errors
}
});
f.add(button, BorderLayout.NORTH);
f.pack();
}
}
基本上我有两个账户,SSPUserInput和SSPViewer。我想在SSPUserInput类中按下一个按钮,在SSPViewer中更改一个JLabel名称。这基本上是一个石头剪刀布游戏。这是我第一次在这里发帖,如果我做错了什么,我很抱歉。
问题内容: 我有一个称为Keys.java的按钮类,它将按钮面板返回到名为Control.java的类。我在Control.java中有一个JLabel,但是我想做的是在按下按钮时更改JLabel。您将如何去做? 我试过在Keys.java中设置一个字符串,该字符串根据按钮而变化,然后将JLabel的文本设置为等于该字符串,但似乎不起作用。 关于如何实现这一点的任何想法? 问题答案: 可能是您更新
问题内容: 我有一个Swing JButton,我的项目也使用了以下代码: 现在,当尝试使用一个按钮更改背景时,它不会变成红色,只有边框变成红色。 在仍用于其余组件/项目时,如何将背景变为红色? 问题答案: 看一下错误4880747:XP L&F:REGRESSION:JButton上的setBackground设置Windows XP中的边框颜色 。评估部分指出: 更改按钮的外观总是会导致与当前
我是Netbeans和Java的新手,对jpanels上的jlabel有一个问题。我有一个jTabbedPane,里面有一个jPanel。我在JPanel上有一个jLabel。我想将jLabel的可见性设置为false,但似乎不起作用。当我运行程序时,标签仍然可见。我不明白为什么。
问题内容: 因此,我一直在试图弄清楚这一点,却无法弄清楚如何做到这一点。我希望另一个类中的按钮之一可以更改GUI类中JLabel的文本。 这是来自GUI类的代码:`import java.awt.Container; 这里是尝试更改JLabel“错误”的按钮中的代码: 问题答案: 首先,添加具有访问权限的吸气剂,以便您的第二堂课可以访问该字段。就像是, 或(如@MadProgrammer在评论中建
问题内容: 我将如何为所有实例设置默认字体。而不是分别为每个字体设置字体。 问题答案: 使用定义JLabel的默认字体: 通过:http : //coding.derkeiler.com/Archive/Java/comp.lang.java.help/2005-04/msg00395.html