首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSlider问题

JSlider问题
EN

Stack Overflow用户
提问于 2013-03-10 12:52:51
回答 1查看 431关注 0票数 0

我正在创建一个程序,它使用滚动条来选择标签的前景颜色,三个水平滚动条用于选择颜色的红色、绿色和蓝色分量。我需要一个标题边框的面板上,持有滚动条。我才刚刚开始。我对这个messagePanel有问题。

代码语言:javascript
复制
import java.awt.*;
import javax.swing.*;

public class MessagePanel extends JPanel
{
    //The message to be displayed
    private String message;
    //The x-Coordinate
    private int xCoordinate;
    //The y-Coordinate
    private int yCoordinate;
    //Centered
    private boolean centered;
    //Interval length for moving message horizontally and vertically
    private int interval = 10;

    public MessagePanel()
    {
    }

    //Construct message panel with a specific message
    public MessagePanel(String message)
    {
        this.message = message;
    }

    //Return that specific message
    public String getMessage()
    {
        return message;
    }

    //Set a new message
    public void setMessage(String message)
    {
        this.message = message;
        repaint();
    }

    //Return xCoordinate
    public int getXCoordinate()
    {
        return xCoordinate;
    }

    //Set a new xCoordinate
    public void setXCoordinate(int x)
    {
        this.xCoordinate = x;
        repaint();
    }

    //Return yCoordinate
    public int getYCoordinate()
    {
        return yCoordinate;
    }

    //Set a new yCoordinate
    public void setYCoordinate(int y)
    {
        this.yCoordinate = y;
        repaint();
    }

    //Return Centered
    public boolean isCentered()
    {
        return centered;
    }

    //Set a new Centered
    public void setCenetered(boolean centered)
    {
        this.centered = centered;
    }

    //Return interval
    public int getInterval()
    {
        return interval;
    }

    //Set a new interval
    public void setInterval(int interval)
    {
        this.interval = interval;
        repaint();
    }

    //Paint the Message
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);

        if (centered)
        {
            //Current metrics for current font
            FontMetrics fm = g.getFontMetrics();

            //Find the center location to display                                               
            int stringWidth = fm.stringWidth(message);
            int stringAscent = fm.getAscent();

            //Get the position of the leftmost char in the baseline
            int xCoordinate = getWidth() / 2 - stringWidth / 2;
            int yCoordinate = getHeight() / 2 + stringAscent / 2;
        }

        //Draw String   
        g.drawString(message, xCoordinate, yCoordinate);
    }

    //Move the message to the left
    public void moveLeft()
    {
        xCoordinate -= interval;
        repaint();
    }

    //Move the message to the right
    public void moveRight()
    {
        xCoordinate += interval;
        repaint();
    }

    //Move the message up
    public void moveUp()
    {
        yCoordinate -= interval;
        repaint();
    }

    //Move the message down
    public void moveDown()
    {
        yCoordinate += interval;
        repaint();
    }

    //Override get method for preferredSize
    public Dimension getPreferredSize()
    {
        return new Dimension(200, 30);
    }
}

这是可能的ScrollBar类:

代码语言:javascript
复制
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;

public class ScrollBar extends JFrame
{
    //Creating scroll bars
    private JSlider jslHorz1 = new JSlider(JSlider.HORIZONTAL);
    private JSlider jslHorz2 = new JSlider(JSlider.HORIZONTAL);
    private JSlider jslHorz3 = new JSlider(JSlider.HORIZONTAL);

    //Creating the message panel
    private MessagePanel messagePanel = new MessagePanel("Show Color");

    //Adding scroll bars and message panel
    public ScrollBar(){
        //Creating UI
        setLayout(new BorderLayout(3, 3));

        //Adding messagePanel
        add(messagePanel, BorderLayout.CENTER);

        //Adding the scroll bars
        JPanel three = new JPanel(new GridLayout(3,1));
        three.add(new JLabel("Red"));
        three.add(jslHorz1);
        three.add(new JLabel("Green"));
        three.add(jslHorz2);
        three.add(new JLabel("Blue"));
        three.add(jslHorz3);
        add(three, BorderLayout.SOUTH);
        three.setBorder(new TitledBorder("Choose Color"));



    }

    //Main method
    public static void main(String[] args)
    {
        ScrollBar frame = new ScrollBar();
        frame.setTitle("Exercise 17_15");
        frame.setSize(300, 400);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //  frame.pack();
        frame.setVisible(true);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-10 17:49:05

为了给你一个基本的概念,我会做什么,快速和肮脏的(从你的描述,你的代码似乎对我来说很奇怪)。

  1. 设置容器(JFrame、JPanel等)拿着JLabel (你说的是"label“并使用了JPanel)和三个RGB控件。在这里可以自由选择-只需确保它们以某种方式为您提供有效的值。
  2. 将控件设置为从0到255的值(这应该是每种颜色的范围)
  3. 将基于值的侦听器绑定到您选择的三个RGB控件(这可能会因您选择的控件而异)。当您通过读取每个控件值来更改其中一个值时,
  4. 会使侦听器更改为JLabel的颜色。

您可以使用JLabel的方法设置它的每种颜色。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15319054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档