Swing: Создание перемещаемого компонента …?

Объединения, внешние ключи и первичные ключи - все тесно связанные понятия в реляционной базе данных.

Первичный ключ однозначно идентифицирует строки в данной таблице.

Внешний внешний ключ обозначает первичный ключ в другой таблице .

A Join - это способ извлечения данных из нескольких таблиц.

Я не очень часто использовал SQL Workbench, но я предполагаю, что таблица ссылок ссылается на таблицу, содержащую несколько внешних ключей , чтобы создать отношение «многие ко многим» между двумя таблицами. [1122 ]

Например:

Таблица User

CREATE TABLE User(
    userId INT PRIMARY KEY,
    username VARCHAR(40)
);

Таблица Post

CREATE TABLE Post(
    postId INT PRIMARY KEY,
    postContents VARCHAR(max)
);

Таблица UserPost

CREATE TABLE UserPost(
    userId INT FOREIGN KEY REFERENCES User(userId),
    postId INT FOREIGN KEY REFERENCES Post(postId)
);

[1127 ] Таблица UserPost будет «таблицей ссылок», которая связывает вместе таблицы User и Post, чтобы указать, сколько сообщений может иметь любой пользователь.

Затем вы можете найти все сообщения данного пользователя с SQL-запросом, как показано ниже, используя ссылки UserPost - вместе User и Post

SELECT u.username, p.postContents FROM User u
  JOIN UserPost up ON up.userId = u.userId
  JOIN Post p ON up.postId = p.postId

Так Таким образом, таблица ссылок позволяет нам использовать объединения для объединения информации из нескольких таблиц. Из-за этого таблицы ссылок чаще называют «таблицами соединений». См. этот пост для более подробной информации о таблицах соединения.

20
задан ivan_ivanovich_ivanoff 17 May 2009 в 10:56
поделиться

2 ответа

Я предлагаю простое, но хорошо работающее решение, обнаруженное мной;)

Что мне делать?

  • Когда нажимается мышь, я записываю курсора позиция на экране , и положение компонента .
  • Когда мышь перетаскивается, я вычисляю разницу между новым и старая позиция курсора на экране , и переместите компонент по этой разнице .

Протестировано с последней версией JDK 6 под Linux (OpenSuse, KDE3),
но послушайте, это Java Swing, он должен работать одинаково везде.

Вот код:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

public class MyDraggableComponent
    extends JComponent {

  private volatile int screenX = 0;
  private volatile int screenY = 0;
  private volatile int myX = 0;
  private volatile int myY = 0;

  public MyDraggableComponent() {
    setBorder(new LineBorder(Color.BLUE, 3));
    setBackground(Color.WHITE);
    setBounds(0, 0, 100, 100);
    setOpaque(false);

    addMouseListener(new MouseListener() {

      @Override
      public void mouseClicked(MouseEvent e) { }

      @Override
      public void mousePressed(MouseEvent e) {
        screenX = e.getXOnScreen();
        screenY = e.getYOnScreen();

        myX = getX();
        myY = getY();
      }

      @Override
      public void mouseReleased(MouseEvent e) { }

      @Override
      public void mouseEntered(MouseEvent e) { }

      @Override
      public void mouseExited(MouseEvent e) { }

    });
    addMouseMotionListener(new MouseMotionListener() {

      @Override
      public void mouseDragged(MouseEvent e) {
        int deltaX = e.getXOnScreen() - screenX;
        int deltaY = e.getYOnScreen() - screenY;

        setLocation(myX + deltaX, myY + deltaY);
      }

      @Override
      public void mouseMoved(MouseEvent e) { }

    });
  }

}

public class Main {

  public static void main(String[] args) {
    JFrame f = new JFrame("Swing Hello World");

    // by doing this, we prevent Swing from resizing
    // our nice component
    f.setLayout(null);

    MyDraggableComponent mc = new MyDraggableComponent();
    f.add(mc);

    f.setSize(500, 500);

    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    f.setVisible(true);
  }

}
33
ответ дан 30 November 2019 в 00:09
поделиться

Кроме того, я обнаружил, что можно создать JInternalFrame внутри JFrame, но проблема в том, что вы всегда получаете раздражающую строку заголовка окна .

К сожалению, чтобы отключить строку заголовка, необходим грязный обходной путь :

public class MyDraggableComponent extends JInternalFrame {

  public MyDraggableComponent() {
    InternalFrameUI thisUI = getUI();
    if (thisUI instanceof BasicInternalFrameUI) {
      ((BasicInternalFrameUI) thisUI).setNorthPane(null);
    }

}

Я действительно скучаю по метод типа "someInternalFrame.setWindowTitleBar (false)" ...
: '(

1
ответ дан 30 November 2019 в 00:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: