gpt4 book ai didi

java - 如何概括这些重复的代码块?

转载 作者:行者123 更新时间:2023-12-02 10:58:56 26 4
gpt4 key购买 nike

像这样具有几乎相同的 block 的代码让我感到畏缩。另外,加起来你就有一千行代码,其中一半就足够了。当然有一种方法可以创建一个循环来实现这一切,并且不需要看起来如此简单和无脑的代码。

临时看来,这样做会添加与我寻求减少的代码一样多的代码:循环制作 5 个按钮、按钮标签数组、背景数组……也许更多。即使结果是可以接受的,我将如何制作一个循环来处理听众? 我不能有一组方法,可以吗?我猜这样的循环必须包含一个switch。是的?如果我不想寻求更好的解决方案,我可能会这样做。所以我问...

监听整组按钮并根据按下的按钮采取行动的代码会是什么样子?我应该将单个监听器分配给哪个组件?又如何?

(如果我意识到我已经知道如何做到这一点并且甚至不需要一开始就问,那么这个问题的答案可能会让我比代码的重复性更令人畏缩,但我还是要问。我现在正处于大脑想要离开的那些时刻之一。)

  private void makeScoremasterBonuses(){
pnlBonuses = new JPanel(new GridLayout(1, 6));
pnlBonuses.setSize(6,1);

JButton t1 = (new JButton("3W"));
t1.setToolTipText("This is a triple-word cell.");
t1.setBackground(TRIPLE_WORD);
t1.setHorizontalAlignment(JButton.CENTER);
t1.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
Highlighter.shadeSymmetric(currentCell,TRIPLE_WORD);
}});

JButton t2 = (new JButton("3L"));
t2.setToolTipText("This is a triple-letter cell");
t2.setBackground(TRIPLE_LETTER);
t2.setHorizontalAlignment(JButton.CENTER);
t2.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
Highlighter.shadeSymmetric(currentCell,TRIPLE_LETTER);
}});

JButton t3 = (new JButton("2W"));
t3.setToolTipText("This is a double-word cell");
t3.setBackground(DOUBLE_WORD);
t3.setHorizontalAlignment(JButton.CENTER);
t3.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
Highlighter.shadeSymmetric(currentCell,DOUBLE_WORD);
}});

JButton t4 = (new JButton("2L"));
t4.setToolTipText("This is a double-letter cell");
t4.setBackground(DOUBLE_LETTER);
t4.setHorizontalAlignment(JButton.CENTER);
t4.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
Highlighter.shadeSymmetric(currentCell,DOUBLE_LETTER);
}});

JButton t5 = (new JButton(""));
t5.setToolTipText("No bonus");
t5.setBackground(WHITE);
t5.setHorizontalAlignment(JButton.CENTER);
t5.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
Highlighter.shadeSymmetric(currentCell,B_NORMAL);
}});

pnlBonuses.add(new JLabel("Legend: "));
pnlBonuses.add(t1);
pnlBonuses.add(t2);
pnlBonuses.add(t3);
pnlBonuses.add(t4);
pnlBonuses.add(t5);

}

我不是要求任何人编写代码;我只是要求任何人编写代码。我什至不想那样(但我不能忽视它!)。

以上代码的作用如下: enter image description here

最佳答案

通常,每当您具有类似的重复功能时,您都希望将该代码提取到如下所示的辅助方法中:

private JButton makeJButton(String label, String toolTip, Color bgColor, final Color highlight) {
JButton button = new JButton(label);
button.setToolTipText(toolTip);
button.setBackground(bgColor);
button.setHorizontalAlignment(JButton.CENTER);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Highlighter.shadeSymmetric(currentCell, highlight);
}
});
return button;
}

然后你的 makeScoremasterBonuses() 方法变得更加简单:

private void makeScoremasterBonuses() {
pnlBonuses = new JPanel(new GridLayout(1, 6));
pnlBonuses.setSize(6, 1);

pnlBonuses.add(new JLabel("Legend: "));
pnlBonuses.add(makeJButton("3W", "This is a triple-word cell.", TRIPLE_WORD, TRIPLE_WORD));
pnlBonuses.add(makeJButton("3L", "This is a triple-letter cell.", TRIPLE_LETTER, TRIPLE_LETTER));
pnlBonuses.add(makeJButton("2W", "This is a double-word cell.", DOUBLE_WORD, DOUBLE_WORD));
pnlBonuses.add(makeJButton("3L", "This is a double-letter cell.", DOUBLE_LETTER, DOUBLE_LETTER));
pnlBonuses.add(makeJButton("", "No bonus.", WHITE, B_NORMAL));
}

关于java - 如何概括这些重复的代码块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23963455/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com