我正在通过一本教科书学习Java编程。编程练习要求您:
(摆动通用功能)显示包含六个标签的框架。将标签的背景设置为白色。将标签的前景分别设置为黑色,蓝色,青色,绿色,洋红色和橙色,如图12.28a所示。将每个标签的边框设置为黄色的线条边框。将每个标签的字体设置为Times
Roman,粗体和20像素。将每个标签的文本和工具提示文本设置为其前景色的名称。
我对这个问题有两个答案。我的答案和书的答案。这两个答案都很好。
我使用一个Array并通过循环使用匿名对象填充它(如类Sixlabels扩展JFrame {}中所示):
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
public class TWELVE_point_8 {
public static void main(String[] args) {
JFrame frame = new SixLabels();
frame.setTitle("Six Labels");
frame.setSize(300, 200);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class SixLabels extends JFrame {
public SixLabels() {
setLayout(new GridLayout(2, 3));
JLabel[] list = {
new JLabel("Black"),
new JLabel("Blue"),
new JLabel("Cyan"),
new JLabel("Green"),
new JLabel("Magenta"),
new JLabel("Orange")};
// set foreground colors
list[0].setForeground(Color.black);
list[1].setForeground(Color.blue);
list[2].setForeground(Color.cyan);
list[3].setForeground(Color.green);
list[4].setForeground(Color.magenta);
list[5].setForeground(Color.orange);
// set background colors
for (int i = 0; i < list.length; i++)
list[i].setBackground(Color.white);
// set fonts
Font font = new Font("TimesRoman", Font.BOLD, 20);
for (int i = 0; i < list.length; i++)
list[i].setFont(font);
// set borders
Border lineBorder = new LineBorder(Color.yellow, 1);
for (int i = 0; i < list.length; i++)
list[i].setBorder(lineBorder);
// set tooltip
for (int i = 0; i < list.length; i++)
list[i].setToolTipText(list[i].getText());
// add all labels to container
for (int i = 0; i < list.length; i++)
add(list[i]);
}
}
并且书中的答案不使用数组列表(如公共Exercise12_8中扩展JFrame {}所示);:
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
public class Exercise12_8 extends JFrame {
private JLabel jlblBlack = new JLabel("black");
private JLabel jlblBlue = new JLabel("blue");
private JLabel jlblCyan = new JLabel("cyan");
private JLabel jlblGreen = new JLabel("green");
private JLabel jlblMagenta = new JLabel("magenta");
private JLabel jlblOrange = new JLabel("orange");
public Exercise12_8() {
setLayout(new GridLayout(2, 3));
this.add(jlblBlack);
this.add(jlblBlue);
this.add(jlblCyan);
this.add(jlblGreen);
this.add(jlblMagenta);
this.add(jlblOrange);
jlblBlack.setBackground(Color.WHITE);
jlblBlue.setBackground(Color.WHITE);
jlblCyan.setBackground(Color.WHITE);
jlblGreen.setBackground(Color.WHITE);
jlblMagenta.setBackground(Color.WHITE);
jlblOrange.setBackground(Color.WHITE);
jlblBlack.setForeground(Color.BLACK);
jlblBlue.setForeground(Color.BLUE);
jlblCyan.setForeground(Color.CYAN);
jlblGreen.setForeground(Color.GREEN);
jlblMagenta.setForeground(Color.MAGENTA);
jlblOrange.setForeground(Color.ORANGE);
Font font = new Font("TImesRoman", Font.BOLD, 20);
jlblBlack.setFont(font);
jlblBlue.setFont(font);
jlblCyan.setFont(font);
jlblGreen.setFont(font);
jlblMagenta.setFont(font);
jlblOrange.setFont(font);
Border border = new LineBorder(Color.YELLOW);
jlblBlack.setBorder(border);
jlblBlue.setBorder(border);
jlblCyan.setBorder(border);
jlblGreen.setBorder(border);
jlblMagenta.setBorder(border);
jlblOrange.setBorder(border);
jlblBlack.setToolTipText("black");
jlblBlue.setToolTipText("blue");
jlblCyan.setToolTipText("cyan");
jlblGreen.setToolTipText("green");
jlblMagenta.setToolTipText("magenta");
jlblOrange.setToolTipText("orange");
}
public static void main(String[] args) {
Exercise12_8 frame = new Exercise12_8();
frame.setTitle("Exercise12_8");
frame.setSize(400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null); // Center the frame
frame.setVisible(true);
}
}
我的问题是:是否最好单独声明JLabel对象(就像本书一样),或者像我一样匿名填充Array(或ArrayList)?我在本书中所看到的唯一好处是可读性强,并具有一个变量名(可以在以后的程序中使用,但不适用于该特定程序)。
我可以为您提供第三个答案。创建一个采用的方法JLabel
并对其进行配置。这样,您可以使用其他两种方法之一,并降低代码复杂度。
答案是,这取决于。这取决于您要实现的目标。
如果您要进行大量更改(例如对您在这里的组件)反复进行相同的操作,那么我可能会想使用简单List
或数组。如果元素的数量是动态的,或者只能在类内部访问,则这特别有用。
另一方面,如果您想从外部更改或更新组件的状态,则通常更容易提供对组件的命名访问。是的,您可以提供一种使用int
参数的方法,但随后您就遇到了始终必须验证参数的问题:P
所以我想,问题是,您需要实现什么?
问题内容: 以下代码段是否会降低性能? 还是这段代码实际上更有意义? 如果在字节码中这两个完全相等,那么显然第一种方法在样式方面看起来更好,但我想确保确实如此。 问题答案: 在当今的编译器中,没有。我在最小范围内声明对象,因为对于下一个家伙而言,它更具可读性。
我有一个非常具体的问题,我在网上任何地方都找不到答案。我不熟悉python代码(C是我的第一语言),所以我假设这只是一个语义问题。我的问题是关于在for循环范围内声明的对象。 这段代码的目标是在for循环中创建一个新的临时对象,向其列表中添加一些项,然后将该对象放入for循环之外的列表中。在for循环的每次迭代中,我希望创建一个新的、分离的对象来填充项目。但是,每次执行for循环时,对象的列表中已
问题内容: 我想在完成后从中删除对象,但找不到解决方法。尝试像下面的示例代码中那样将其删除不会起作用。如何在此循环中访问当前对象的迭代器以将其删除? 问题答案: 您不能在增强的for循环内。您必须使用“长手”方法: 当然,并非所有的迭代器都 支持 删除,但是您可以使用。 另一种方法是建立一个额外的“要删除的像素”集合,然后在列表最后调用。
经过前面的学习,我们知道创建对象的标准格式如下: 类名称 对象名 = new 类名称(); 每次 new 都相当于开辟了一个新的对象,并开辟了一个新的物理内存空间。如果一个对象只需要使用唯一的一次,就可以使用匿名对象,匿名对象还可以作为实际参数传递。 匿名对象就是没有明确的给出名字的对象,是对象的一种简写形式。一般匿名对象只使用一次,而且匿名对象只在堆内存中开辟空间,而不存在栈内存的引用。 程序运
更新:每个类的用途取决于哪种应用程序,但这些类可能被放置在应用程序的不同层中。 例如: 数据从数据库(数据库实体)到HTML表单(模型/视图模型)的数据 REST API结果到数据库的数据 null 当然,一个具有类似特性的库是有意的,但是Kotlin特性的信息也是受欢迎的(比如在ECMAScript中传播)。