Альтернатива событий C# в Java

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

table td {
  border:solid 5x transparent;
}

И можно только применить его горизонтально как так...

table td {
  border-left:solid 10px transparent;
}
table td:first-child {
  border-left:0;
}

Вот полная рабочая демонстрация того, что я полагаю, что Вы пытаетесь выполнить...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>
  <head>
    <title>Layout</title>
    <style type="text/css">
      table {
        border: 1px solid black;
      }

      table td {
        background: yellow;
        border-left:solid 10px transparent;
      }

     table td:first-child {
       border-left:0;
     }
    </style>
  </head>
  <body>
    <table>
      <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
        <td>5</td>
        <td>6</td>
      </tr>
      <tr>
        <td>7</td>
        <td>8</td>
        <td>9</td>
      </tr>
    </table>
  </body>
</html>

я не полагаю, что IE6 поддерживает CSS: первый ребенок, таким образом, вот обходное решение для этого...

<!–-[if IE 6]>
<style type="text/css">
  table td {
    border-left: expression(this.previousSibling == null ? '0' : 'solid 5px transparent');
  }
</style>
<![endif]-->
15
задан Mohsan 7 October 2009 в 09:16
поделиться

3 ответа

Хотя большинство примеров относятся к событиям графического интерфейса пользователя, принципы в основном те же. По сути, вы хотите, чтобы интерфейс или абстрактный класс представлял обработчик события, например

public interface EventHandler
{
    // Change signature as appropriate of course
    void handleEvent(Object sender, EventArgs e);
}

, тогда издатель события будет иметь:

public void addEventHandler(EventHandler handler)
public void removeEventHandler(EventHandler handler)

Он либо сохранит список обработчиков событий, либо, возможно, их инкапсулирует в многоразового типа. Затем, когда событие происходит, вы просто вызываете handleEvent в каждом обработчике по очереди.

Вы можете думать о типах делегатов в C # как о очень похожих на интерфейсы с одним методом в Java, а события на самом деле просто пара методов добавления / удаления.

public interface EventHandler
{
    // Change signature as appropriate of course
    void handleEvent(Object sender, EventArgs e);
}

тогда издатель события будет иметь:

public void addEventHandler(EventHandler handler)
public void removeEventHandler(EventHandler handler)

Он будет либо хранить сам список обработчиков событий, либо, возможно, инкапсулировать их в многоразовый тип. Затем, когда событие происходит, вы просто вызываете handleEvent в каждом обработчике по очереди.

Вы можете думать о типах делегатов в C # как о очень похожих на интерфейсы с одним методом в Java, а события на самом деле просто пара методов добавления / удаления.

public interface EventHandler
{
    // Change signature as appropriate of course
    void handleEvent(Object sender, EventArgs e);
}

тогда издатель события будет иметь:

public void addEventHandler(EventHandler handler)
public void removeEventHandler(EventHandler handler)

Он либо хранит список обработчиков событий, либо, возможно, инкапсулирует их в многоразовый тип. Затем, когда событие происходит, вы просто вызываете handleEvent в каждом обработчике по очереди.

Вы можете думать о типах делегатов в C # как о очень похожих на интерфейсы с одним методом в Java, а события на самом деле просто пара методов добавления / удаления.

28
ответ дан 1 December 2019 в 00:33
поделиться

Java поддерживает различные реализации обработки событий - простой Observer / Observable в java.util, PropertyChangeEvent в java.beans и события GUI, наследуемые от AWTEvent.

Объект Observable имеет список наблюдателей, которые реализуют интерфейс Observer , а также механизмы для добавления и удаления наблюдателей. Если o.notifyObservers (x) вызывается для наблюдаемого, update (o, x) будет вызываться для каждого наблюдателя. Этот механизм несколько старомоден и редко используется в новом коде - он восходит к Java 1.0 до того, как EventObject был добавлен в Java 1.1 и улучшена обработка событий для AWT и beans.

Компоненты и события GUI распространяют объект, расширяющий java.util. EventObject для слушателей, которые реализуют подчиненный интерфейс EventListener . Обычно, если вы используете существующий API, вы будете заботиться только о событиях и слушателях для этого API, но если вы определяете API, события и слушатели должны следовать этому соглашению.

Это также соглашение в API Java для вызывать обработчики событий «слушателями», а не обработчиками, и все имена интерфейсов слушателей заканчиваются на Listener . Имена методов не начинаются с 'on', а должны быть в прошедшем времени - mouseMoved или handshakeCompleted , а не onMouseMove или handleMouseMove ].

Класс PropertyChangeSupport обеспечивает реализацию механизма для добавления и удаления слушателей из bean-компонента, а также используется для свойств виджетов Swing.

Если вы пишете свою собственную обработку слушателя, это обычное дело чтобы позволить слушателям удалить себя, вызвав source.removeXXXListener (this) из своего метода обработки событий. Простое повторение простой коллекции слушателей и вызов их методов обработки приведет к исключению ConcurrentModificationException в этих случаях - вам нужно скопировать коллекцию слушателей или использовать коллекцию, которая может быть изменена одновременно.

стандартно, чтобы позволить слушателям удалить себя, вызвав source.removeXXXListener (this) из своего метода обработки событий. Простое повторение простой коллекции слушателей и вызов их методов обработки приведет к исключению ConcurrentModificationException в этих случаях - вам нужно скопировать коллекцию слушателей или использовать коллекцию, которая может быть изменена одновременно.

стандартно, чтобы позволить слушателям удалить себя, вызвав source.removeXXXListener (this) из своего метода обработки событий. Простое повторение простой коллекции слушателей и вызов их методов обработки приведет к исключению ConcurrentModificationException в этих случаях - вам нужно скопировать коллекцию слушателей или использовать коллекцию, которая может быть изменена одновременно.

7
ответ дан 1 December 2019 в 00:33
поделиться

Посмотрите это руководство . В нем рассматриваются некоторые аспекты обработки событий Swing, с которыми вы сталкивались при поиске, но концепции довольно общие. Проще говоря, обработчики событий поддерживают набор слушателей (реализующих интерфейс) и перебирают их, когда запускают событие, вызывая метод в интерфейсе.

1
ответ дан 1 December 2019 в 00:33
поделиться